#ifndef MYCAMERA_H
#define MYCAMERA_H
#include "mycamera.h"
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>
#include <stdbool.h>
#include <unistd.h>
#include <errno.h>
#include <dirent.h>
#include <linux/input.h>  //输入子系统模型有关的头文件
#include <sys/mman.h>   //内存映射有关的头文件
#include <sys/wait.h>
#include <signal.h>   //跟signal有关的头文件
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/msg.h>
#include <pthread.h>
#include <semaphore.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/videodev2.h>  //跟V4L2架构有关的头文件
#include <QThread>
#include <QImage>


#include <jpeglib.h>
#include <jerror.h>

//#include "mainwindow.h"
#define W 640
#define H 480

//摄像头
//自己封装一个结构体，专门存放每个缓冲区的大小，首地址
struct camerabuf
{
    void *start; //保存缓冲区首地址
    int len;  //保存缓冲区大小
};
class mycamera:public QThread
{
    Q_OBJECT
public:
    static mycamera *get()
    {
        static mycamera m;
        return &m;
    }

    mycamera();
    //三个公有方法
    int camera_init(); //初始化摄像头
    int camera_capture(int x,int y); //采集画面出队入队
    int camera_uninit(); //关闭摄像头

    //重写父类QThread的run方法
    void run()override;
    int yuyv2rgb(int y, int u, int v);
    int yuyv2rgb0(unsigned char *yuv, unsigned char *rgb, unsigned int width, unsigned int height);
private:
    int camerafd;
    int lcdfd;
    int *lcdmem;
    //定义结构体数组存放四个缓冲区的信息
    struct camerabuf array[4];

signals:
    void sigImg(QImage);
};

//*******************


#endif // MYCAMERA_H
